package com.gdust.lease.common.exception;

import com.gdust.lease.common.result.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * ClassName: GlobalExceptionHandler
 * Package: com.gdust.lease.common.exception
 * Description: 全局异常处理器，用于捕获并处理项目中的异常，返回统一的错误结果。
 *
 * @Author syun
 * @Create 2025/1/3 19:19
 * @Version 1.0
 */
@ControllerAdvice // 标识该类为全局异常处理器，适用于所有带有 @Controller 注解的类。
public class GlobalExceptionHandler {

    /**
     * 处理所有 Exception 类型的异常。
     *
     * @param e 捕获的 Exception 异常对象。
     * @return 包含错误代码和错误信息的 Result 对象，表示通用失败响应。
     */
    @ExceptionHandler(Exception.class) // 指定捕获的异常类型为 Exception。
    @ResponseBody // 方法的返回值会直接作为 HTTP 响应体返回。
    public Result handle(Exception e) {
        // 打印异常堆栈信息到控制台，便于排查问题。
        e.printStackTrace();
        // 返回一个通用的失败响应结果。
        return Result.fail();
    }

    /**
     * 处理自定义的 LeaseException 类型的异常。
     *
     * @param e 捕获的 LeaseException 异常对象。
     * @return 包含错误代码和错误信息的 Result 对象，表示具体的失败原因。
     */
    @ExceptionHandler(LeaseException.class) // 指定捕获的异常类型为 LeaseException。
    @ResponseBody // 方法的返回值会直接作为 HTTP 响应体返回。
    public Result handle(LeaseException e) {
        // 打印异常堆栈信息到控制台，便于排查问题。
        e.printStackTrace();
        // 返回一个带有具体错误码和错误信息的失败响应结果。
        return Result.fail(e.getCode(), e.getMessage());
    }

}
